// eslint-disable-next-line @typescript-eslint/triple-slash-reference
/// <reference  path="../../support/index.d.ts" />
import '../../support/commands'

// Напишите следующий тест-кейс и успешно выполните его: (2 балла)
//   + Зайти на форму авторизации.
//   + Авторизоваться.
//   + Перейти на страницу создания постов или продуктов (Перешел в карточку товара для отображения отзывов).
//   + Создать товар или пост (Создал отзыв).
//   + Проверить создание товара или поста (Проверил создание отзыва).
//   + Удалить товар или пост (Удалил отзыв).
//   + Проверить удаление товара или поста (Проверил удаление отзыва).

describe('Тестируем создание и удаление отзыва', () => {
	beforeEach(() => {
		cy.viewport(1480, 920)
		cy.visit('/signin')
		cy.login()
		cy.url().should('be.equal', 'http://localhost:3000/')
		cy.get('div > a:nth-child(2)').contains('Каталог').click()
	})

	it('Создать отзыв в карточке 1-го продукта', () => {
		// Переходим на страницу продукта
		cy.get('[data-testid="PRODUCT_CARDS"] > div:nth-child(1) > div').click()

		let productId: string
		cy.url()
			.then((url) => {
				productId = url.replace('http://localhost:3000/product/', '')
			})
			.then(() => {
				// Следим за созданием отзыва
				cy.intercept(
					`https://api.react-learning.ru/products/review/${productId}`
				).as('review')
			})
			.then(() => {
				// Нажали Написать отзыв
				cy.get('[data-testid="ADD_REVIEW_BUTTON"]').click()
				// Ввели текст отзыва
				cy.get('[data-testid="REVIEW_INPUT_TEXTFIELD"]').type(
					'Отзыв от Cypress!'
				)
				// Добавили оценку
				cy.get('[data-testid="REVIEW_RATING"] > label:nth-child(7)').click()
				// Опубликовать отзыв
				cy.get('[data-testid="PUBLISH_REVIEW_BUTTON"]').click()
				// Проверяем отправку отзыва
				cy.wait('@review').its('response.statusCode').should('eq', 200)
			})
	})

	it('Удалить отзыв в карточке 1-го продукта', () => {
		// Следим за получением данных товара-отзывов
		cy.intercept('https://api.react-learning.ru/products/*').as('product')
		// Следим за удалением отзыва
		cy.intercept(
			'DELETE',
			'https://api.react-learning.ru/products/review/*/*'
		).as('review')

		// Переходим на страницу продукта
		cy.get('[data-testid="PRODUCT_CARDS"] > div:nth-child(1) > div').click()

		cy.wait('@product').then(() => {
			// Находим отзыв и удаляем
			cy.get('[data-testid="DELETE_REVIEW_BUTTON"]')
				.children('svg')
				.should('exist')
				.first()
				.click()
			// Проверяем, что отзыв удален
			cy.wait('@review').its('response.statusCode').should('eq', 200)
		})
	})
})
